package com.qf.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * Redis存取数据序列化配置类
 *
 *      \xAC\xED\x00\x05t\x00\x03  key
 *      \xAC\xED\x00\x05t\x00\x05  value
 * @author zhaojian
 */
@Configuration
public class RedisTemplateConfig {

    /**
     * 直接注入使用：
     *   set key value    XaswterfgswrqeKey  sxvxvalue
     */
    @Autowired
    private RedisTemplate redisTemplate;//8大数据类型  //原生的 类
 /*   @Autowired
    private StringRedisTemplate stringRedisTemplate;//字符串类型 */



    /**
     * Redis的 Java配置
     *
     *
     * @param connectionFactory
     * @return
     */
    @Bean //SpringIOC 容器中
    public RedisTemplate<String,Object> redisTemplate(LettuceConnectionFactory connectionFactory) {


        //1. 创建RedisTemplate对象,并连接Redis
        RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(connectionFactory);
        //公用的
        //序列化： JSON串与对象之间互转？
        Jackson2JsonRedisSerializer jsonRedisSerializer = new Jackson2JsonRedisSerializer(String.class);



        //2. 设置Key的序列化方式
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//         *      \xAC\xED\x00\x05t\x00\x03  key  == key
        redisTemplate.setKeySerializer(stringRedisSerializer);
// *      \xAC\xED\x00\x05t\x00\x05  value  == value
        redisTemplate.setValueSerializer(jsonRedisSerializer);
        //只解决了 Redis中 String类型 与 Hash类型的 Key  Hkey HValue Value的 二大类型 其它的类型还是不行
        //3. 设置Value的序列化方式
        redisTemplate.setHashKeySerializer(stringRedisSerializer);
        redisTemplate.setHashValueSerializer(jsonRedisSerializer);
        //4. 返回
        return redisTemplate;
    }
}
